from datetime import datetime

from django.utils import timezone

from django import template


def my_capfirst(value):
    # 对单词首字母转大写后重新赋值
    return value.capitalize()


# 类名+括号是实例对象 注册器对象
register = template.Library()
register.filter('mycapfirst', my_capfirst)


# 第一个参数是需要处理的变量值
# 第二个参数接收传入进来的过滤器的参数
@register.filter('mydefault')
def my_default(value, arg):
    if value:
        return value
    else:
        return arg


@register.simple_tag()
def current_time(format_string):
    return datetime.now().strftime(format_string)


@register.filter(name='time_since')
def time_since(value):
    '''
    对发布的时间进行处理
    1、如果和当前的时间间隔小于1分钟，显示'刚刚'
    2、如果大于1分钟小于1小时，显示'**分钟前'
    3、如果大于1小时小于1天，显示'**小时前'
    4、如果大于1天小于30天，显示'**天前'
    5、如果大于30天，显示具体的发布时间
    :param value: 发布时间
    :return: 显示时间
    '''
    # now = datetime.now()
    now = timezone.localtime()
    print('test', now, value)
    # 计算时间间隔，当前的时间减去发布时间
    timestep = (now - value).total_seconds()  # 时间差 单位为秒
    if timestep < 60:
        return '刚刚'
    elif 60 < timestep < 3600:
        return f'{int(timestep / 60)}分钟前'
        # return '{}分钟前'.format(timestep / 60)
    elif 3600 < timestep < 3600 * 24:
        return f'{int(timestep / 3600)}小时前'
        # return '{}小时前'.format(timestep / 3600)
    elif 3600 * 24 < timestep < 3600 * 24 * 30:
        res = int(timestep / 3600 / 24)
        return f'{res}天前'
    else:
        return value.strftime('%Y-%m-%d %H:%M:%S')
